import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Hua YY
 * Date: 2024 —03 —31
 * Time: 20:41
 */
public class Solution {
    /*这是一个方法
    传进来一个名字叫tokens的数组，
    数组里的元素都是一个个字符串，
    每个字符串所包含的内容不是数字就是运算符
     * */
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for (String x : tokens) {//遍历传入的tokens数组的每一个元素=每一个字符串
            if(!isoperation(x)){ //判断字符串是否为运算符
                stack.push(Integer.parseInt(x));//如果不是运算符把字符串转化为整型，然后放入栈中
            }else{
                int numRight = stack.pop();//如果遇到运算符那就把栈中元素先拿出来一个先放到右边
                int numLeft = stack.pop();//再拿出来一个放到左边
                switch(x){
                    case "+":
                        stack.push(numLeft + numRight);
                        break;

                    case "-":
                        stack.push(numLeft - numRight);
                        break;

                    case "*":
                        stack.push(numLeft * numRight);
                        break;

                    case "/":
                        stack.push(numLeft / numRight);
                        break;
                }
            }
        }
        return stack.pop();
    }

    private boolean isoperation(String s){
        if(  s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")  )   {
            return true;
        }else{
            return false;
        }
    }

    public static void main(String[] args) {
        String[] test1 = new String[]{"4" , "13" , "5" , "/" , "+"};
        String[] test2 = new String[]{"10" , "6" , "9" , "3" , "+" , "-11" , "*" , "/" , "*" , "17" , "+" , "5" , "+" };
        //注意注意写字符串的时候里面千万不要填充空格之类的，在Integer.parseInt()这个方法中会报错

        Solution solution = new Solution();
        System.out.println(solution.evalRPN(test1));
        System.out.println(solution.evalRPN(test2));//代码运行成功，升仙了哈哈哈哈哈666666666


    }

}
